package org.example.corpus.utils;

import com.huaban.analysis.jieba.JiebaSegmenter;
import opennlp.tools.tokenize.SimpleTokenizer;

import java.util.List;

public class TokenizerUtil {

    /**
     * 中文语料分词方法，去除标点符号
     *
     * @param text 中文文本
     * @return 分词后的字符串数组
     */
    public static String[] tokenizeChinese(String text) {
        // 使用 JiebaSegmenter 进行中文分词
        JiebaSegmenter segmenter = new JiebaSegmenter();
        List<String> tokens = segmenter.sentenceProcess(text);

        // 过滤掉标点符号
        tokens.removeIf(token -> token.matches("[\\p{P}\\p{Space}]"));

        // 将结果转换为字符串数组
        return tokens.toArray(new String[0]);
    }

    /**
     * 英文语料分词方法，去除标点符号
     *
     * @param text 英文文本
     * @return 分词后的字符串数组
     */
    public static String[] tokenizeEnglish(String text) {
        // 使用 SimpleTokenizer 进行英文分词
        SimpleTokenizer tokenizer = SimpleTokenizer.INSTANCE;

        // 获取分词结果
        String[] tokens = tokenizer.tokenize(text);

        // 过滤掉标点符号
        return removePunctuation(tokens);
    }

    /**
     * 过滤掉标点符号
     *
     * @param tokens 分词结果
     * @return 过滤后的分词结果
     */
    private static String[] removePunctuation(String[] tokens) {
        return java.util.Arrays.stream(tokens)
                .filter(token -> !token.matches("[\\p{P}\\p{Space}]"))
                .toArray(String[]::new);
    }
}